package view;

import java.awt.*;
import javax.swing.*;

import Dao.PontoDao;

import model.Ponto;

import java.awt.event.*;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.util.EventObject;
import java.util.Vector;

class TelaLogin extends JDialog implements ActionListener
{
	private String _username=null,_latitude=null,_longitude=null,_descricao=null;
	private JLabel label1,label2,label3,label4,label5;
	private JTextField user,latitude,longitude,descricao;
	private JButton ok,cancel,novoPonto;
	private Container container;
	private JComboBox pontosList;
    private java.util.List<Ponto> pontos;
    private String descricaoPontos[];
    private Ponto pontoSelecionado;
    private Ponto newPonto;
	private Icon iconPonto;
    private boolean flag = false;

	public TelaLogin(JFrame frame)
	{
		super(frame,"Login",true);
		PontoDao pontoDao = new PontoDao();
		pontos = pontoDao.listar();
		pontoDao.finaliza();
		descricaoPontos = new String[pontos.size()];

		for (int i = 0; i < pontos.size(); i++) {
			
			descricaoPontos[i] = pontos.get(i).getDescricao();
			
			
		}
		initDialogBox(frame);
	}

	private void initDialogBox(JFrame frame)
	{
		container = this.getContentPane();
		container.setLayout(null);
		label1= new JLabel("Nome :");
		label1.setBounds(10,10,80,20);
		label2= new JLabel("Ponto Atual :");
		label2.setBounds(10,40,80,20);
		user= new JTextField();
		user.setBounds(90,10,100,20);
		pontosList = new JComboBox(descricaoPontos);
		pontosList.setBounds(90, 40, 100, 20);
		pontosList.setMaximumRowCount(10);
		pontosList.setSelectedIndex(-1);
		pontosList.addItemListener(
		  new ItemListener() {
			
			@Override
			public void itemStateChanged(ItemEvent event) {
				if(event.getStateChange() == ItemEvent.SELECTED){
					String descricao = (String) pontosList.getSelectedItem();
					for (int i = 0; i < pontos.size(); i++) {
						if(pontos.get(i).getDescricao().equals(descricao)){
							pontoSelecionado = pontos.get(i);
						}
						
					}
				}
			}
		}
		);

		label3= new JLabel("Latitude :");
		label3.setBounds(10,70,80,20) ;
		label3.setVisible(false);
		label4= new JLabel("Longitude :");
		label4.setBounds(10,100,80,20);
		label4.setVisible(false);
		label5 = new JLabel("Descrição :");
		label5.setBounds(10, 130, 80, 20);
		label5.setVisible(false);
		latitude= new JTextField();//Latitude do ponto;
		latitude.setBounds(90,70,100,20);
		latitude.setVisible(false);
		longitude=new JTextField();//Longitude do ponto;
		longitude.setBounds(90,100,100,20);
		longitude.setVisible(false);
		descricao = new JTextField(); //descricao do ponto
		descricao.setBounds(90, 130, 100, 20);
		descricao.setVisible(false);
		
		final ClassLoader loader = ClassLoader.getSystemClassLoader();
		iconPonto = new ImageIcon(loader.getResource("images/new.png"));
		novoPonto = new JButton();
		novoPonto.setBounds(200, 40, 25, 25);
		// configure os ícones com:  
		novoPonto.setToolTipText("Cadastrar Novo Ponto");
		novoPonto.setDisabledIcon( iconPonto );  
		novoPonto.setDisabledSelectedIcon( iconPonto );  
		novoPonto.setIcon( iconPonto );  
		novoPonto.setPressedIcon( iconPonto );  
		novoPonto.setRolloverIcon( iconPonto );  
		novoPonto.setRolloverSelectedIcon( iconPonto );  
		novoPonto.setSelectedIcon( iconPonto );  
		  
		// configura para não pintar a borda, nem o interior nem o fóco  
		novoPonto.setBorderPainted( false );  
		novoPonto.setContentAreaFilled( false );  
		novoPonto.setFocusPainted( false ); 
		
		ok=new JButton("Login");
		ok.setBounds(30,160,70,20);
		cancel= new JButton("Cancel");
		cancel.setBounds(110,160,80,20);

		container.add(label1);
		container.add(user);
		container.add(label2);
		container.add(label3);
		container.add(latitude);
		container.add(label4);
		container.add(label5);
		container.add(longitude);
		container.add(descricao);
		container.add(ok);
		container.add(cancel);
		container.add(pontosList);
		container.add(novoPonto);

		user.addActionListener(this);
		latitude.addActionListener(this);
		longitude.addActionListener(this);
		descricao.addActionListener(this);
		ok.addActionListener(this);
		cancel.addActionListener(this);
		
		ButtonHandler handler = new ButtonHandler();
		novoPonto.addActionListener(handler);
		
		this.setSize(240,220);
		this.setResizable(false);
		this.setLocationRelativeTo(frame);
		this.setLocation(450,220);
		this.setVisible(true);
	}
    private class ButtonHandler implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
           pontosList.setEnabled(false);
           label3.setVisible(true);
           label4.setVisible(true);
           label5.setVisible(true);
           descricao.setVisible(true);
           latitude.setVisible(true);
           longitude.setVisible(true);
		}
    	
    }
	
	public void actionPerformed(ActionEvent event)
	{
        if((event.getSource() == ok)  || (event.getSource() == latitude)
            	||(event.getSource() == user) || (event.getSource() == longitude) ) {
        	_username = user.getText();
    		_latitude = latitude.getText();
    		_longitude = longitude.getText();
    		_descricao = descricao.getText();
    		
    		if(_username.length()==0)
    		{
    			JOptionPane.showMessageDialog(this,
    				"Favor digite um Login","Erro",
    					JOptionPane.WARNING_MESSAGE);
    			return;
    		}
    		if((pontosList.getSelectedIndex() == -1) && (pontosList.isEnabled()))
    		{
    			JOptionPane.showMessageDialog(this,
    				"Favor escolha um Ponto ou cadastre um novo.","Erro",
    					JOptionPane.WARNING_MESSAGE);
    			return;
    		}
    		if((latitude.isVisible()) && (_latitude.length() == 0))
    		{
    			JOptionPane.showMessageDialog(this,
    				"Favor digite uma Latitude.","Erro",
    					JOptionPane.WARNING_MESSAGE);
    			return;
    		}

    		if((longitude.isVisible()) && (_longitude.length()== 0))
    		{
    			JOptionPane.showMessageDialog(this,
    					"Favor digite uma Longitude.","Erro",
    						JOptionPane.WARNING_MESSAGE);
    			return;			
    		}
    		
    		if((descricao.isVisible()) && (_descricao.length()== 0))
    		{
    			JOptionPane.showMessageDialog(this,
    					"Favor digite uma Descrição.","Erro",
    						JOptionPane.WARNING_MESSAGE);
    			return;			
    		}
    		if((descricao.isVisible()) &&(latitude.isVisible()) && (longitude.isVisible()))
    		{
    			flag = true;
    		}
    		
        	if(flag){
        		newPonto = new Ponto();
        		newPonto.setDescricao(_descricao);
        		newPonto.setLatitude(Double.parseDouble(_latitude));
        		newPonto.setLongitude(Double.parseDouble(_longitude));
        	}

		} else if(event.getSource() == cancel) {
			//NOTHING
		}
        
		this.setVisible(false);

	}
	
	protected String getUserName()
	{
		return _username;
	}

	protected String getLatitude()
	{
		return _latitude;
	}

	protected String getLongitude()
	{
		return _longitude;
	}
	
	protected Ponto getPonto() 
	{
	    return pontoSelecionado;
	}
	
	protected Ponto getNewPonto() {
		return newPonto;
	}
}